package com.tdam2011.grupo06.model;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;

import android.net.Uri;
import android.telephony.PhoneNumberUtils;

public class Contacto
{
	private int tableID;
	private int DBID;
	private String nombre;
	private ArrayList<Telefono> tel;
	private ArrayList<Email> mail;
	private String usuario;
	private int telPref;
	private String numPre;
	
	private Uri photoUri;
	
	public Contacto()
	{
		DBID = 0;
		nombre = null;
		tel = new ArrayList<Telefono>();
		mail = new ArrayList<Email>();
		usuario = null;
		telPref = 0;
		photoUri = null;
	}
	
	public Contacto(int i, String n, Uri uri)
	{
		DBID = i;
		nombre = n;
		tel = new ArrayList<Telefono>();
		mail = new ArrayList<Email>();
		usuario = null;
		telPref = 0;
		photoUri = uri;
	}
	
	public Contacto(int dBID) {
		photoUri = null;
		DBID = dBID;
		nombre = null;
		tel = new ArrayList<Telefono>();
		mail = new ArrayList<Email>();
		usuario = null;
		telPref = 0;
	}

	public int getTableID()
	{
		return tableID;
	}
	
	public void setTableID(int i)
	{
		tableID = i;
	}
	
	public int getDbId()
	{
		return DBID;
	}
	
	public void setDbId(int i)
	{
		DBID = i;
	}
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Telefono getTel(int pos) {
		return (Telefono) tel.get(pos);
	}

	public void addTel(Telefono t) 
	{
		tel.add(t);
	}
	
	public Telefono getTelById(int id) 
	{
		Iterator<Telefono> iter = tel.iterator();
		Telefono aux;
		while (iter.hasNext())
		{
			aux = iter.next();
			if(aux.getId()==id)
			{
				return aux; 
			}
		}
		return null;
	}
	
	public ArrayList<Telefono> getTel() {
		return tel;
	}
	
	public Email getEmail(int pos) {
		return (Email) mail.get(pos);
	}

	public void addEmail(Email t) 
	{
		mail.add(t);
	}
	
	public Email getEmailById(int id) 
	{
		Iterator<Email> iter = mail.iterator();
		Email aux;
		while (iter.hasNext())
		{
			aux = iter.next();
			if(aux.getId()==id)
			{
				return aux; 
			}
		}
		return null;
	}
	
	public ArrayList<Email> getEmail() 
	{
		return mail;
	}
	
	public void clearEmail()
	{
		mail = new ArrayList<Email>();
	}

	public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public int getTelPref() {
		return telPref;
	}

	public void setTelPref(int telPref) 
	{
		this.telPref = telPref;
	}

	public Uri getPhotoUri() {
		return photoUri;
	}

	public void setPhotoUri(Uri photoUri) {
		this.photoUri = photoUri;
	}

	public boolean existsTel(String t)
	{
		Iterator<Telefono> iter = tel.iterator();
		Telefono aux;
		while (iter.hasNext())
		{
			aux = iter.next();
			if(PhoneNumberUtils.compare(aux.getNumero(), t))
			{
				return true; 
			}
		}
		return false;
	}
	
	public boolean existsEmail(String m)
	{
		Iterator<Email> iter = mail.iterator();
		Email aux;
		while (iter.hasNext())
		{
			aux = iter.next();
			if(aux.getMail().compareTo(m)==0)
			{
				return true; 
			}
		}
		return false;
	}
	
	public static Comparator<Contacto> comparadorNombreAsc = new Comparator<Contacto>()
	{
		public int compare(Contacto thisOne, Contacto another) 
		{
			return another.nombre.compareTo(thisOne.nombre);
		}
	};
	
	public static Comparator<Contacto> comparadorNombreDesc = new Comparator<Contacto>()
	{
		public int compare(Contacto thisOne, Contacto another) 
		{
			try
			{
				return thisOne.nombre.compareTo(another.nombre);
			}
			catch(NullPointerException e)
			{
				e.printStackTrace();
				return -1;
			}
		}
	};
	
	public static Comparator<Contacto> comparadorTelPreAsc = new Comparator<Contacto>()
	{
		public int compare(Contacto thisOne, Contacto another) 
		{
			return another.numPre.compareTo(thisOne.numPre);
		}
	};
	
	public static Comparator<Contacto> comparadorTelPreDesc = new Comparator<Contacto>()
	{
		public int compare(Contacto thisOne, Contacto another) 
		{
			return thisOne.numPre.compareTo(another.numPre);
		}
	};

	public String getNumPre() {
		return numPre;
	}

	public void setNumPre(String numPre) {
		this.numPre = numPre;
	}
}
